/*
 * @Author: huyingxin 1425833556@qq.com
 * @Date: 2022-09-22 12:32:36
 */

// 预计实现目标:数组去重模式，选择某一个字段保留之前还是之后的数据。

/**
 * @description:          根据对象组成数组中的某一个对象属性去重数组项目并返回一个新的数组
 * @param {Array<any>}    list     传入数组
 * @param {Array<string>} code     去重需要的字段,字符串数组和单独字符串都可,数组可传入多字段去重
 * @param {string}        Override 选择模式，向前覆盖还是向后覆盖 传入back后为后面覆盖前面 默认为前覆盖后
 * @return {Array<any>}   新数组
 */
const duplicateRemoval = (
  list: Array<any>,
  code: Array<string> | string,
  Override?: string
) => {
  return list.reduce((all: any, next: any) => {
    let newList = all.some((item: any) =>
      code instanceof Array
        ? code.every((sign: any) => item[sign] === next[sign])
        : item[code] === next[code]
    )
      ? Override === "back"
        ? [next]
        : all
      : [...all, next];
    return newList;
  }, []);
};

// 测试模板
const textList = [
  { a: 1, b: "b1", c: "c1" },
  { a: 1, b: "b1", c: "c2" },
  { a: 2, b: "b2", c: "c3" },
];

console.log(duplicateRemoval(textList, ["a", "b"]));


